package com.cn.icss.service.impl;

import com.cn.icss.service.IDictionaryTypeService;
import com.cn.icss.vo.DictionaryType;
import com.cn.icss.vo.StreamtypeInfo;
import com.jfinal.aop.Aop;
import com.jfinal.plugin.ehcache.CacheKit;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @中软华腾软件系统有限公司,未经授权不得擅自传播
 * @类描述:
 * @类名称:DictionaryTypeServiceImpl
 * @作者: Administrator
 * @编辑时间: 2020/04/16 14:40
 * @版本: 1.0
 */
public class DictionaryTypeServiceImpl  implements IDictionaryTypeService {

    DictionaryType dictionaryTypeDao = new DictionaryType().dao();

    @Override
    public List<DictionaryType> findAll() {

        List<DictionaryType> dictionaryTypes = dictionaryTypeDao.findAll();
        System.out.println(dictionaryTypes);
        return dictionaryTypes;
    }

    /**
     *@中软华腾软件系统有限公司,未经授权不得擅自传播
     *@方法描述: 通过streamtypeInfo查询出全部的前缀类型URL(以后应该也是在某个房间PK的时候要自己推的流式混流
     * 也就是说要拉其他房间的流进行混流后再推送)
     *@方法参数描述:
     ** @param streamtypeInfo
     *@作者: 蒋正午
     *@编辑时间: 2020/04/17  10:27
     *@返回值描述: java.util.Map<java.lang.String,java.lang.Object>
     */
    public Map<String,Object> finddicTpyePath(StreamtypeInfo streamtypeInfo){
        Map<String,Object> cid_paths = new HashMap<>();
//        IDictionaryTypeService dictionaryTypeService = Aop.get(DictionaryTypeServiceImpl.class);
        // 从缓存中查询出所有的类型
        List<DictionaryType> dictionaryTypeList =  CacheKit.get("dictionary_type_cache", "dictionaryTypes");
        if (dictionaryTypeList == null) {
            dictionaryTypeList = this.findAll();
            if(dictionaryTypeList!=null && dictionaryTypeList.size()>0){
                CacheKit.put("dictionary_type_cache", "dictionaryTypes", dictionaryTypeList);
            }
        }
        if(streamtypeInfo!=null && dictionaryTypeList!=null){
            String dcid = streamtypeInfo.getDicid();
            String dtypeid = streamtypeInfo.get("dicType");
            List<String> allPath = new ArrayList<>(5);
            this.recursionFindDictionaryType(dtypeid,allPath,dictionaryTypeList);
            cid_paths.put(dcid,allPath);
        }
        return cid_paths;
    }

    /**
    *@中软华腾软件系统有限公司,未经授权不得擅自传播
    *@方法描述: 递归查询字典类型(只能是树不能是图)
    *@方法参数描述:
    ** @param dictionaryTypeId
     * @param allPath
     * @param allDictionaryTypes
    *@作者: 蒋正午
    *@编辑时间: 2020/04/17  11:12
    *@返回值描述: void
    */
    @Override
    public void recursionFindDictionaryType(String dictionaryTypeId, List<String> allPath, List<DictionaryType> allDictionaryTypes) {
        if(StringUtils.isNotBlank(dictionaryTypeId) && allDictionaryTypes!=null && allDictionaryTypes.size()>0) {
            for(DictionaryType dictionaryType: allDictionaryTypes){
                if(dictionaryTypeId.equalsIgnoreCase(dictionaryType.getTypeid())){
                    allPath.add(dictionaryTypeId);
                    // 然后递归
                    String pDictionaryTypeId = dictionaryType.getPid();
                    recursionFindDictionaryType(pDictionaryTypeId,allPath,allDictionaryTypes);
                }
            }
        }
    }
}


